package com.ying.tests.BBBbook.java8.Thread;


import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerTest {

    // 定义线程数量
    private static final int THREAD_COUNT = 20;
    // 初始值为0
    private static AtomicInteger count = new AtomicInteger(0);
    // 计数
    public static void increase() {
        count.incrementAndGet();
    }

    public static void main(String[] args) {
        Thread[] threads = new Thread[THREAD_COUNT];
        for (int i = 0; i < THREAD_COUNT; i++) {
            new Thread(() -> {
                for (int j = 0; j < 1000; j++) {
                    increase();
                }
            }).start();
        }
        //
        while (Thread.activeCount() > 2) {
            // idea 的快速启动会多一个线程
//            Thread.currentThread().getThreadGroup().list();
            Thread.yield();
        }
        System.out.println(count);
        // count < 20000（static int 无作用）
        // count < 20000（static volatile int 无作用）
        // count = 20000（static AtomicInteger count = new AtomicInteger(0);因为AtomicInteger.incrementAndGet()方法的原子性）
    }

}
